// 定义Consumer类，该类实现了Runnable接口以支持多线程运行。
public class Consumer implements Runnable {

	// 私有成员变量tid表示消费者的标识（可能是线程ID或者名字）。
	private String tid;
	// 私有成员变量quantity表示消费者一次想要消费的产品数量。
	private int quantity;

	// 构造函数，初始化消费者的标识和消费数量。
	public Consumer(String tid, int quantity) {
		this.tid = tid;
		this.quantity = quantity;
	}

	// 公开的getQuantity方法，返回消费者一次消费的产品数量。
	public int getQuantity() {
		return quantity;
	}

	// 公开的getTid方法，返回消费者的标识。
	public String getTid() {
		return tid;
	}

	// 实现Runnable接口的run方法，在线程启动时调用。
	public void run() {
		consume();
	}

	// consume方法用于从Buffer类的静态队列中消费产品。
	public void consume(){
		// 同步块，锁定Buffer类的静态队列que，以防止多线程并发错误。
		synchronized (Buffer.que) {
			// 当队列为空时，等待，直到队列中有产品。
			while(Buffer.que.size() == 0){
				System.out.println(this.tid+"购买"+quantity+"件产品【失败】，此时缓冲池还有产品： "+Buffer.que.size());
				try {
					Buffer.que.wait();  // 调用wait方法，使当前线程等待，直到其他线程调用notify或notifyAll。
				} catch (InterruptedException e) {
					e.printStackTrace(); // 打印中断异常堆栈信息。
				}
			}
			// 消费指定数量的产品，从队列中移除元素。
			for (int i = 0; i < quantity; i++) {
				Buffer.que.remove();
			}
			System.out.println(this.tid+"购买"+quantity+" 件产品【成功】，此时缓冲池还有产品: "+Buffer.que.size());
			Buffer.que.notifyAll();  // 通知所有等待队列的线程，队列已可用。
		}
	}

}
